package com.yxx.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 上传模式枚举
 * UploadModeEnum 是一个枚举类，表示不同的上传模式和对应的策略 Bean 名称。
 * 它的作用是封装上传模式和策略名称的映射关系，方便在 UploadStrategyContext 中进行查找。
 * 枚举模式：使用枚举类封装上传模式及其对应策略的映射。这样做使得代码更清晰，避免硬编码策略名称。
 * 集中管理：所有的上传模式（本地、本地OSS等）都集中在这个枚举类中，易于扩展和维护。
 * @author yuxiangxun
 * @date 2025/1/26
 * @apiNote
 */
@Getter
@AllArgsConstructor
public enum UploadModeEnum {
    /**
     * 本地
     */
    LOCAL("local", "localUploadStrategyImpl"),

    /**
     * oss
     */
    OSS("oss", "ossUploadStrategyImpl"),

    /**
     * cos
     */
    COS("cos", "cosUploadStrategyImpl"),

    /**
     * qiniu
     */
    QINIU("qiniu", "qiniuUploadStrategyImpl");

    /**
     * 模式
     */
    private final String mode;
    /**
     * 策略
     */
    private final String strategy;

    /**
     * 获取策略
     * getStrategy 方法根据模式返回相应的策略名称。
     * @param mode 模式
     * @return 模式
     */
    public static String getStrategy(String mode){
        // 遍历上传模式枚举
        for(UploadModeEnum value : UploadModeEnum.values()){
            // 如果上传模式枚举中的模式 与 传进来的模式 相同
            if(value.getMode().equals(mode)){
                // 返回上传模式枚举中的策略
                return value.getStrategy();
            }
        }
        return null;
    }
}
